<!DOCTYPE html>
<!-- saved from url=(0045)https://docs.jeequan.com/docs/jeepay/dev_serv -->
<html lang="zh-CN" class=" " style=""><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>功能开发 - Powered by MinDoc</title>

    
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="renderer" content="webkit">
    <meta name="author" content="Minho">
    <meta name="keywords" content="jeepay文档,xxpay文档,支付系统文档,开源聚合支付系统文档,Jeepay文档,功能开发">
    <meta name="description" content="功能开发-介绍jeepay计全支付系统使用,二次开发部署文档.">

    
    <link href="./功能开发 - Powered by MinDoc_files/bootstrap.min.css" rel="stylesheet">

    <link href="./功能开发 - Powered by MinDoc_files/style.min.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/font-awesome.min.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/nprogress.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/kancloud.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/jstree.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/mermaid.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/sequence-diagram-min.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/editormd.preview.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/markdown.preview.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/github.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/katex.min.css" rel="stylesheet">
    <link href="./功能开发 - Powered by MinDoc_files/print.css" media="print" rel="stylesheet">

    <script type="text/javascript">window.book={"identify":"jeepay"};</script>
<link rel="stylesheet" href="./功能开发 - Powered by MinDoc_files/layer.css" id="layuicss-skinlayercss"></head>
<body>
<div class="m-manual manual-mode-view manual-reader">
    <header class="navbar navbar-static-top manual-head" role="banner">
        <div class="container-fluid">
            <div class="navbar-header pull-left manual-title">
                <span class="slidebar" id="slidebar"><i class="fa fa-align-justify"></i></span>
                <a href="https://docs.jeequan.com/docs/jeepay" title="Jeepay文档" class="book-title">Jeepay文档</a>
                <span style="font-size: 12px;font-weight: 100;"></span>
            </div>
            <div class="navbar-header pull-right manual-menu">
                <a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
                
                <div class="dropdown pull-right" style="margin-right: 10px;">
                    <a href="https://docs.jeequan.com/" class="btn btn-default"><i class="fa fa-home" aria-hidden="true"></i> 首页</a>
                </div>
                <div class="dropdown pull-right" style="margin-right: 10px;">
                
                
                
                </div>
                
            </div>
        </div>
    </header>
    <article class="container-fluid manual-body">
        <div class="manual-left">
            <div class="manual-tab">
                <div class="tab-navg">
                    <span data-mode="view" class="navg-item active"><i class="fa fa-align-justify"></i><b class="text">目录</b></span>
                    <span data-mode="search" class="navg-item"><i class="fa fa-search"></i><b class="text">搜索</b></span>
                </div>
                <div class="tab-util">
                    <span class="manual-fullscreen-switch">
                        <b class="open fa fa-angle-right" title="展开"></b>
                        <b class="close fa fa-angle-left" title="关闭"></b>
                    </span>
                </div>
                <div class="tab-wrap">
                    <div class="tab-item manual-catalog">
                        <div class="catalog-list read-book-preview jstree jstree-1 jstree-default" id="sidebar" role="tree" tabindex="0" aria-activedescendant="11" aria-busy="false"><ul class="jstree-container-ul jstree-children jstree-wholerow-ul jstree-no-dots" role="group"><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="3_anchor" id="3" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/index" tabindex="-1" title="Jeepay" data-version="1636477516" id="3_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>Jeepay</a></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="4_anchor" aria-expanded="true" id="4" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/introduction" tabindex="-1" title="系统介绍" data-version="1624871984" id="4_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统介绍</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="5_anchor" id="5" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/framework" tabindex="-1" title="系统架构" data-version="1715132862" id="5_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统架构</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="6_anchor" id="6" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/function" tabindex="-1" title="功能列表" data-version="1624872022" id="6_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>功能列表</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="7_anchor" aria-expanded="true" id="7" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/develop" tabindex="-1" title="开发部署" data-version="1624872040" id="7_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>开发部署</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="true" aria-level="2" aria-labelledby="10_anchor" id="10" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow jstree-wholerow-clicked">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor jstree-clicked" href="https://docs.jeequan.com/docs/jeepay/dev_serv" tabindex="-1" title="功能开发" data-version="1624872069" id="10_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>功能开发</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="11_anchor" id="11" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow jstree-wholerow-hovered">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor jstree-hovered" href="https://docs.jeequan.com/docs/jeepay/dev_channel" tabindex="-1" title="通道对接" data-version="1636345825" id="11_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>通道对接</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="12_anchor" id="12" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/ui" tabindex="-1" title="UI规范" data-version="1624872087" id="12_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>UI规范</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="13_anchor" id="13" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/deploy" tabindex="-1" title="部署运行" data-version="1718189984" id="13_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>部署运行</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="75_anchor" id="75" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1d99ciatu11h5" tabindex="-1" title="常见问题" data-version="1703915761" id="75_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>常见问题</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="82_anchor" id="82" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dbdn8bqgo270" tabindex="-1" title="系统使用" data-version="1666439979" id="82_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统使用</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="625_anchor" id="625" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dtoth2rhr9sj" tabindex="-1" title="支付宝沙箱教程" data-version="1654824191" id="625_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付宝沙箱教程</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="634_anchor" id="634" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dvukp7mpq96q" tabindex="-1" title="Docker部署" data-version="1657277771" id="634_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>Docker部署</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="669_anchor" aria-expanded="true" id="669" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/ifstore" tabindex="-1" title="接口市场" data-version="1679201383" id="669_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口市场</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="672_anchor" id="672" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1ejdnsuhveb16" tabindex="-1" title="支付接口安装" data-version="1679215111" id="672_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付接口安装</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="8_anchor" aria-expanded="true" id="8" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/interface" tabindex="-1" title="接口文档" data-version="1624872115" id="8_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口文档</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="14_anchor" id="14" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/api_rule" tabindex="-1" title="接口规则" data-version="1681101577" id="14_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口规则</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="15_anchor" id="15" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/payment_api" tabindex="-1" title="支付接口" data-version="1704857925" id="15_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="16_anchor" id="16" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/refund_api" tabindex="-1" title="退款接口" data-version="1624872147" id="16_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>退款接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="65_anchor" id="65" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/transfer_api" tabindex="-1" title="转账接口" data-version="1629107892" id="65_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>转账接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="69_anchor" id="69" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/division_api" tabindex="-1" title="分账接口" data-version="1651010086" id="69_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>分账接口</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="465_anchor" id="465" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dg3r7b2remns" tabindex="-1" title="SDK下载" data-version="1678379723" id="465_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>SDK下载</a></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="9_anchor" id="9" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/contact" tabindex="-1" title="联系我们" data-version="1698809527" id="9_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>联系我们</a></li></ul></div>

                    </div>
                    <div class="tab-item manual-search">
                        <div class="search-container">
                            <div class="search-form">
                                <form id="searchForm" action="https://docs.jeequan.com/docs/jeepay/search" method="post">
                                    <div class="form-group">
                                        <input type="search" placeholder="请输入搜索关键字" class="form-control" name="keyword">
                                        <button type="submit" class="btn btn-default btn-search" id="btnSearch">
                                            <i class="fa fa-search"></i>
                                        </button>
                                    </div>
                                </form>
                            </div>
                            <div class="search-result">
                                <div class="search-empty">
                                    <i class="fa fa-search-plus" aria-hidden="true"></i>
                                    <b class="text">暂无相关搜索结果！</b>
                                </div>
                                <ul class="search-list" id="searchList">
                                </ul>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="m-copyright">
                <p>
                    本文档由 <a href="https://www.jeequan.com/" target="_blank">计全科技</a> 发布
                </p>
            </div>
        </div>
        <div class="manual-right">
            <div class="manual-article">
                
                <div class="article-content">
                    <div class="article-body  markdown-body editormd-preview-container" id="page-content"><article class="markdown-article-inner"><div class="markdown-toc editormd-markdown-toc" style="height: 866px;"><ul class="markdown-toc-list"><li class="directory-item"><a class="directory-item-link directory-item-link-2" href="https://docs.jeequan.com/docs/jeepay/dev_serv#3qsme1" level="2">一、 后端API接口开发</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#egespj" level="3">1.1 &gt; 配置菜单：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#b0i486" level="3">1.2 &gt; 新建model，mapper, service (如果需要)：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#4qzyew" level="3">1.3 &gt; 编写业务API controller：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-2" href="https://docs.jeequan.com/docs/jeepay/dev_serv#6za0xd" level="2">二、 前端页面开发：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#1xpjqj" level="3">2.1 &gt; 新建页面文件</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#7hnzvo" level="3">2.2 &gt; 编写业务代码</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_serv#7umxld" level="3">2.3 &gt; 配置路由</a></li></ul></div><div class="markdown-article"><p class="line">Jeepay是一套开源支付系统，同时也是一套成熟开发脚手架。基于Jeepay平台作为开发框架进行业务功能的二次开发，需要开发者掌握如下技能：</p><ul>
<li>后端： java开发语言，spring boot， spring security安全框架， mybatis plus</li><li>前端： vue全家桶（vue2, vue-router, vuex）, 项目是基于antDesign vue进行的二次开发， 熟悉antdv的同学可快速上手。 </li></ul><h2 id="3qsme1" class="markdown-heading"><a name="3qsme1" class="reference-link"></a><span class="header-link octicon octicon-link"></span>一、 后端API接口开发</h2><h3 id="egespj" class="markdown-heading"><a name="egespj" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.1 &gt; 配置菜单：</h3><p class="line">表结构如下： </p><pre class="hljs sql"><code class="language-sql">    <span class="hljs-comment"><span class="hljs-comment">-- 权限表</span></span>
    <span class="hljs-keyword"><span class="hljs-keyword">DROP</span></span> <span class="hljs-keyword"><span class="hljs-keyword">TABLE</span></span> <span class="hljs-keyword"><span class="hljs-keyword">IF</span></span> <span class="hljs-keyword"><span class="hljs-keyword">EXISTS</span></span> <span class="hljs-string"><span class="hljs-string">`t_sys_entitlement`</span></span>;
    <span class="hljs-keyword"><span class="hljs-keyword">CREATE</span></span> <span class="hljs-keyword"><span class="hljs-keyword">TABLE</span></span> <span class="hljs-string"><span class="hljs-string">`t_sys_entitlement`</span></span> (
      <span class="hljs-string"><span class="hljs-string">`ent_id`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">32</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'权限ID[ENT_功能模块_子模块_操作], eg: ENT_ROLE_LIST_ADD'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`ent_name`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">32</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'权限名称'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`menu_icon`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">32</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'菜单图标'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`menu_uri`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">128</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'菜单uri/路由地址'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`component_name`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">32</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'组件Name（前后端分离使用）'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`ent_type`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">CHAR</span></span>(<span class="hljs-number"><span class="hljs-number">2</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'权限类型 ML-左侧显示菜单, MO-其他菜单, PB-页面/按钮'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`quick_jump`</span></span> TINYINT(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-number"><span class="hljs-number">0</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'快速开始菜单 0-否, 1-是'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`state`</span></span> TINYINT(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-number"><span class="hljs-number">1</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'状态 0-停用, 1-启用'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`pid`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">32</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'父ID'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`ent_sort`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">INT</span></span>(<span class="hljs-number"><span class="hljs-number">11</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-number"><span class="hljs-number">0</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'排序字段, 规则：正序'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`system`</span></span> <span class="hljs-built_in"><span class="hljs-built_in">VARCHAR</span></span>(<span class="hljs-number"><span class="hljs-number">8</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'所属系统： MGR-运营平台, MCH-商户中心'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`created_at`</span></span> <span class="hljs-keyword"><span class="hljs-keyword">TIMESTAMP</span></span>(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-keyword"><span class="hljs-keyword">CURRENT_TIMESTAMP</span></span>(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'创建时间'</span></span>,
      <span class="hljs-string"><span class="hljs-string">`updated_at`</span></span> <span class="hljs-keyword"><span class="hljs-keyword">TIMESTAMP</span></span>(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">NOT</span></span> <span class="hljs-literal"><span class="hljs-literal">NULL</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-keyword"><span class="hljs-keyword">CURRENT_TIMESTAMP</span></span>(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">ON</span></span> <span class="hljs-keyword"><span class="hljs-keyword">UPDATE</span></span> <span class="hljs-keyword"><span class="hljs-keyword">CURRENT_TIMESTAMP</span></span>(<span class="hljs-number"><span class="hljs-number">6</span></span>) <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span> <span class="hljs-string"><span class="hljs-string">'更新时间'</span></span>,
      PRIMARY <span class="hljs-keyword"><span class="hljs-keyword">KEY</span></span> (<span class="hljs-string"><span class="hljs-string">`ent_id`</span></span>, <span class="hljs-string"><span class="hljs-string">`system`</span></span>)
    ) <span class="hljs-keyword"><span class="hljs-keyword">ENGINE</span></span>=<span class="hljs-keyword"><span class="hljs-keyword">InnoDB</span></span> <span class="hljs-keyword"><span class="hljs-keyword">DEFAULT</span></span> <span class="hljs-keyword"><span class="hljs-keyword">CHARSET</span></span>=utf8mb4 <span class="hljs-keyword"><span class="hljs-keyword">COMMENT</span></span>=<span class="hljs-string"><span class="hljs-string">'系统权限表'</span></span>;</code></pre><p class="line">请参考 <code>init.sql</code> 文件中的角色管理功能，按照下图对应的字段初始化。 </p><p class="line"><img src="./功能开发 - Powered by MinDoc_files/dev_1.png" title="null" alt="" layer-index="0"></p><p class="line"><strong>注意：</strong></p><ul>
<li>字段【component_name】 为组件名称，需要提前与前端开发人员进行约定。 比如组件名称为：【MyBizPage】, 将MyBizPage初始化到菜单即可。</li></ul><ul>
<li>页面、按钮级别的资源和其他菜单均不在左侧菜单中进行显示。 为了做权限的细粒度控制，也需要进行初始化操作。 </li></ul><h3 id="b0i486" class="markdown-heading"><a name="b0i486" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.2 &gt; 新建model，mapper, service (如果需要)：</h3><p class="line">1.2.1 &gt; 将待创建的表结构DDL语句在数据库执行，然后将jeepay项目导入到IDEA或eclipse中。 </p><p class="line">1.2.2 &gt; 打开jeepay-z-codegen项目下的： com.gen.MainGen文件 ，更改对应的 【数据库连接属性】，【要生成的表名】,  <strong>右键</strong> <strong><em>RUN执行</em></strong>  即可生成对应的文件 如图。</p><p class="line"><img src="./功能开发 - Powered by MinDoc_files/dev_2.png" title="null" alt="" layer-index="1"></p><p class="line">1.2.3 &gt; 将生成的文件放置到对应的目录： </p><ul>
<li><p class="line">【<strong>entity</strong>】: <strong><em>com.jeequan.jeepay.core.entity;  (jeepay-core 项目)</em></strong></p>
</li><li><p class="line">【<strong>service</strong>】：<strong><em>com.jeequan.jeepay.service.impl; (jeepay-service 项目)</em></strong></p>
</li><li><p class="line">【<strong>mapper</strong>】：<strong><em>com.jeequan.jeepay.service.mapper; (jeepay-service 项目)</em></strong></p>
</li></ul><p class="line">1.2.4 &gt; 将文件复制好之后在jeepay-z-codegen项目下删除生成文件，否则该项目将报错（因为该项目仅作为代码生成器， 没有依赖开发环境，将提示找不到包）</p><h3 id="4qzyew" class="markdown-heading"><a name="4qzyew" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.3 &gt; 编写业务API controller：</h3><p class="line">比如待开发业务为 myBiz， 在 <strong>com.jeequan.jeepay.mgr.ctrl</strong> 包下新建java文件: <strong>MyBizController.java</strong></p><p class="line">定义接口地址并与前端开发人员进行约定。</p><p class="line">jeepay平台整体使用restful接口规范， 应尽量保持一致。<br>restful是什么? 可参考【<a href="http://www.ruanyifeng.com/blog/2014/05/restful_api.html" target="_blank">http://www.ruanyifeng.com/blog/2014/05/restful_api.html</a>】 这里不再赘述。</p><p class="line"> 增删改查建议使用如下路径： </p><ul>
<li><p class="line">列表： <code>GET</code> /api/myBizs</p>
</li><li><p class="line">详情： <code>GET</code> /api/myBizs/{recordId}</p>
</li><li><p class="line">新增： <code>POST</code> /api/myBizs</p>
</li><li><p class="line">修改： <code>PUT</code> /api/myBizs/{recordId}</p>
</li><li><p class="line">删除： <code>DELETE</code> /api/myBizs/{recordId}</p>
</li></ul><p class="line">示例代码： <img src="./功能开发 - Powered by MinDoc_files/dev_3.png" title="null" alt="" layer-index="2"></p><p class="line">也可参考角色功能项：【com.jeequan.jeepay.mgr.ctrl.sysuser.SysRoleController】</p><p class="line">应注意： </p><ol>
<li><p class="line">接口路径一般需以 [/api]开头，并进入springSecurity拦截器，可通用验证用户权限， 支持获取当前上下文的用户信息。 如无需走用户验证则将api定义为： /api/anon/** 规则即可全部放行。 配置详见【WebSecurityConfig】文件。</p>
</li><li><p class="line">可选继承： <code>com.jeequan.jeepay.mgr.ctrl.CommonCtrl extends AbstractController</code>  其中包含了公共的基础函数； 比如，获取当前ip, 得到当前用户对象， 获取检索分页信息， 搜索条件， 排序字段等。</p>
</li><li><p class="line"><a href="https://github.com/PreAuthorize" title="@PreAuthorize" class="at-link" target="_blank"></a><a href="https://github.com/PreAuthorize" title="@PreAuthorize" class="at-link" target="_blank">@PreAuthorize</a> 应在每个api函数上显式添加， 以防止越权操作。  权限标识即初始化的权限表的entId。  spring security框架注解表达式请参考： <a href="https://docs.spring.io/spring-security/site/docs/4.0.1.RELEASE/reference/htmlsingle/#el-common-built-in" target="_blank">https://docs.spring.io/spring-security/site/docs/4.0.1.RELEASE/reference/htmlsingle/#el-common-built-in</a></p>
</li><li><p class="line"><a href="https://github.com/MethodLog" title="@MethodLog" class="at-link" target="_blank"></a><a href="https://github.com/MethodLog" title="@MethodLog" class="at-link" target="_blank">@MethodLog</a> 应在重要的接口显式添加。 jeepay框架可自动记录当前用户在当前接口的操作详情。 对应菜单为：<br>[ 系统管理 / 系统日志 ]</p>
</li><li><p class="line">QueryWrapper 为<code>mybatis plus</code>插件所支持条件构造器： 详见：<a href="https://mybatis.plus/guide/wrapper.html" target="_blank">https://mybatis.plus/guide/wrapper.html </a></p>
</li></ol><h2 id="6za0xd" class="markdown-heading"><a name="6za0xd" class="reference-link"></a><span class="header-link octicon octicon-link"></span>二、 前端页面开发：</h2><h3 id="1xpjqj" class="markdown-heading"><a name="1xpjqj" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.1 &gt; 新建页面文件</h3><p class="line">与后端开发人员约定好组件名称： 比如上面提到的： 【MyBizPage】<br>在： <code>/src/views/</code> 目录下新建 <code>mybiz/MyBizPage.vue</code> 文件： 如图： </p><p class="line"><img src="./功能开发 - Powered by MinDoc_files/dev_5.png" title="null" alt="" layer-index="3"></p><h3 id="7hnzvo" class="markdown-heading"><a name="7hnzvo" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.2 &gt; 编写业务代码</h3><p class="line">参考<img src="./功能开发 - Powered by MinDoc_files/dev_4.png" title="null" alt="" layer-index="4"></p><p class="line"><strong>注意：</strong></p><ol>
<li><p class="line">$access(‘权限ID’) 为该功能的权限对应的ID, 需与后端保持一致。 使用v-if 或者v-show进行显示/隐藏<br>也可在函数中使用 this.$access() 进行权限的判断。 </p>
</li><li><p class="line">列表， 新增， 修改，删除 按实际功能进行开发即可。 </p>
</li></ol><h3 id="7umxld" class="markdown-heading"><a name="7umxld" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.3 &gt; 配置路由</h3><p class="line">页面编写完成需要在路由中进行定义，否则将无法正常访问。 </p><p class="line">打开： <code>src/config/appConfig.js</code> 文件，<br>在 <strong>asyncRouteDefine</strong> 数组中 将【MyBizPage】 加入到路由定义中， 如下： </p><pre class="hljs coffeescript"><code><span class="hljs-string"><span class="hljs-string">'MyBizPage'</span></span>: { defaultPath: <span class="hljs-string"><span class="hljs-string">'/mybizs'</span></span>, component: <span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="hljs-function"> =&gt;</span></span> <span class="hljs-keyword"><span class="hljs-keyword">import</span></span>(<span class="hljs-string"><span class="hljs-string">'@/views/mybiz/MyBizPage'</span></span>) }</code></pre><p class="line">就完成了路由的配置工作， 按约定的路由URL进行访问即可。 </p><p class="line">以上。</p><div class="wiki-bottom">文档更新时间: 2021-06-28 17:21 &nbsp;&nbsp;作者：大森林</div></div>































</article></div>
                    
                    <div class="jump-top">
                        <a href="javascript:;" class="view-backtop"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
                    </div>
                </div>

            </div>
        </div>
        <div class="manual-progress"><b class="progress-bar"></b></div>
    <div id="manual-vsplitbar" unselectable="on" style="z-index: 301; position: absolute; user-select: none; cursor: col-resize; left: 275px; height: 100%; display: block; width: 3px;">                        <a href="javascript:void(0)" accesskey="" tabindex="0" title="vsplitbar"></a>                    </div></article>
    <div class="manual-mask"></div>
</div>


<div class="modal fade" id="downloadBookModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title" id="myModalLabel">项目分享</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-sm-12 text-center" style="padding-bottom: 15px;">
                        <img src="./功能开发 - Powered by MinDoc_files/jeepay.png" alt="扫一扫手机阅读">
                    </div>
                </div>
                <div class="form-group">
                    <label for="password" class="col-sm-2 control-label">项目地址</label>
                    <div class="col-sm-10">
                        <input type="text" value="https://docs.jeequan.com/docs/jeepay" class="form-control" onmouseover="this.select()" id="projectUrl" title="项目地址">
                    </div>
                    <div class="clearfix"></div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
            </div>
        </div>
    </div>
</div>

<script src="./功能开发 - Powered by MinDoc_files/jquery.min.js.下载"></script>
<script src="./功能开发 - Powered by MinDoc_files/bootstrap.min.js.下载"></script>
<script src="./功能开发 - Powered by MinDoc_files/jquery.form.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/layer.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/jstree.min.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/nprogress.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/highlight.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/jquery.highlight.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/kancloud.js.下载" type="text/javascript"></script>
<script src="./功能开发 - Powered by MinDoc_files/splitbar.js.下载" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
    $("#searchList").on("click","a",function () {
        var id = $(this).attr("data-id");
        var url = "https:\/\/docs.jeequan.com\/docs\/jeepay\//" + id;
        $(this).parent("li").siblings().find("a").removeClass("active");
        $(this).addClass("active");
        loadDocument(url,id,function (body) {
            return $(body).highlight(window.keyword);
        });
    });
});
</script>


<div id="screenity-ui"><div class="screenity-shadow-dom"><div><div class="screenity-scrollbar"></div><div class="screenity-scrollbar"></div></div><style type="text/css">
			#screenity-ui, #screenity-ui div {
				background-color: unset;
				padding: unset;
				width: unset;
				box-shadow: unset;
				display: unset;
				margin: unset;
				border-radius: unset;
			}
			.screenity-outline {
				position: absolute;
				z-index: 99999999999;
				border: 2px solid #3080F8;
				outline-offset: -2px;
				pointer-events: none;
				border-radius: 5px!important;
			}
		.screenity-blur {
			filter: blur(10px)!important;
		}
			.screenity-shadow-dom * {
				transition: unset;
			}
			.screenity-shadow-dom .TooltipContent {
  border-radius: 30px!important;
	background-color: #29292F!important;
  padding: 10px 15px!important;
  font-size: 12px;
	margin-bottom: 10px!important;
	bottom: 100px;
  line-height: 1;
	font-family: 'Satoshi-Medium', sans-serif;
	z-index: 99999999!important;
  color: #FFF;
  box-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px!important;
  user-select: none;
	transition: opacity 0.3 ease-in-out;
  will-change: transform, opacity;
	animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}

.screenity-shadow-dom .hide-tooltip {
	display: none!important;
}

.screenity-shadow-dom .tooltip-tall {
	margin-bottom: 20px;
}

.screenity-shadow-dom .tooltip-small {
	margin-bottom: 5px;
}

.screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='top'] {
	animation-name: slideDownAndFade;
}
.screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='right'] {
  animation-name: slideLeftAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='bottom'] {
  animation-name: slideUpAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='left'] {
  animation-name: slideRightAndFade;
}

@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

#screenity-ui [data-radix-popper-content-wrapper] { z-index: 999999999999!important; } 

.screenity-shadow-dom .CanvasContainer {
	position: fixed;
	pointer-events: all!important;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
}
.screenity-shadow-dom .canvas {
	position: fixed;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
	background: transparent!important;
}
.screenity-shadow-dom .canvas-container {
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999;
	position: fixed!important;
	background: transparent!important;
}

.ScreenityDropdownMenuContent {
	z-index: 99999999999!important;
  min-width: 200px;
  background-color: white;
  margin-top: 4px;
  margin-right: 8px;
  padding-top: 12px;
  padding-bottom: 12px;
  border-radius: 15px;
  z-index: 99999;
  font-family: 'Satoshi-Medium', sans-serif;
  color: #29292F;
  box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35),
    0px 10px 20px -15px rgba(22, 23, 24, 0.2);
  animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}
.ScreenityDropdownMenuContent[data-side="top"] {
  animation-name: slideDownAndFade;
}
.ScreenityDropdownMenuContent[data-side="right"] {
  animation-name: slideLeftAndFade;
}
.ScreenityDropdownMenuContent[data-side="bottom"] {
  animation-name: slideUpAndFade;
}
.ScreenityDropdownMenuContent[data-side="left"] {
  animation-name: slideRightAndFade;
}
.ScreenityItemIndicator {
  position: absolute;
  right: 12px; 
  width: 18px;
  height: 18px;
  background: #3080F8;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ScreenityDropdownMenuItem,
.ScreenityDropdownMenuRadioItem {
  font-size: 14px;
  line-height: 1;
  display: flex;
  align-items: center;
  height: 40px;
  padding: 0 5px;
  position: relative;
  padding-left: 22px;
  padding-right: 22px;
  user-select: none;
  outline: none;
}
.ScreenityDropdownMenuItem:hover {
    background-color: #F6F7FB !important;
    cursor: pointer;
}
.ScreenityDropdownMenuItem[data-disabled] {
  color: #6E7684; !important;
  cursor: not-allowed;
  background-color: #F6F7FB !important;
}



@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

</style></div></div><div class="layui-layer-move"></div></body></html>